package utils;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileOutputStream;

/**
 * @author Zhang Guangyong
 * @desacription Xml文件工具类
 * @date 2019年07月22日 8:33
 */
public class XmlUtils {

    /**
     * 设置xml 内部属性值
     *
     * @param xmlPath  : xml文件路径
     * @param outPath  : xml文件输出路径
     * @param titleStr : 重命名标题格式
     * @author 张广勇
     * @date 2019/7/23 8:56
     */
    public static void setXmlTitle(String xmlPath, String outPath, String titleStr) {
        // 构建解析器
        SAXReader reader = new SAXReader();
        // 解析文件
        Document document = null;
        try {
            document = reader.read(new File(xmlPath));
        } catch (DocumentException e) {
            System.out.println("解析xml文件出错");
            e.printStackTrace();
        }
        if (document != null) {
            // 获取xml文件根节点
            Element root = document.getRootElement();
            // 获取根节点下的一级子节点
            Element metadata = root.element("metadata");
            //获取子节点元素
            Element titleElement = metadata.element("title");
            // 赋值
            titleElement.setText(titleStr);

            Element language = metadata.element("language");
            language.setText("zh-CN");

            // 输出文件
            outputXml(outPath, document);
        }
    }


    /**
     * 由document输出xml文件
     * @param outPath : 输出路径（带文件名）
     * @param documentAft :
     * @author 张广勇
     * @date 2019/7/23 9:07
     */
    private static void outputXml(String outPath, Document documentAft) {
        if (documentAft != null) {
            // 输出文件
            try {
                // 创建格式化类
                OutputFormat format = OutputFormat.createPrettyPrint();
                // 设置编码格式，默认UTF-8
                format.setEncoding("UTF-8");
                // 创建输出流，此处要使用Writer，需要指定输入编码格式，使用OutputStream则不用
                FileOutputStream fos = new FileOutputStream(outPath);
                // 创建xml输出流
                XMLWriter writer = new XMLWriter(fos, format);
                // 生成xml文件
                writer.write(documentAft);
                writer.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.err.println("document 为 null");
        }
    }
}
